/**************************************
 * js工具方法
 * @author Xiaopeng
 * @date 2014-07-15
 * @refer 关注JS正则表达式的使用：http://www.jb51.net/tools/regex.htm
 **************************************/

/*-----------------------------------------------------
   共用特殊字符正则匹配
-----------------------------------------------------*/
var comm_specChar_regex = "\"|\'|\“|\”|\‘|\’|\%|\$|\&|\￥|\……|\·|\—|\-|\——|\!|\！|\#|\@|\~|\^|\*|\,|\.|\，|\。|\?|\？|\;|\；|\:|\：|\{|\}|\\|\/|\[|\]|\(|\)|\+|\-|\、|\||\<|\>";

/**
 * JS闭包实现常用JS工具的封装
 * 说明：外部、内部函数调用的方法，如CommonUtils.trim(_str)
 */
var CommonUtils = {
		/**
		 * 检查输入字符串是否符合纯数字格式 
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false 
		 */
		isNumber: function(str) {   
			var regu = "^[0-9]+$"; 
			var re = new RegExp(regu); 
			if (str.search(re) != -1) { 
				return true; 
			}
			return false; 
		},
		
		/**
		 * 检查输入对象的值是否符合整数格式
		 * @param str
		 * @returns 如果通过验证返回true,否则返回false
		 */
		isInteger: function(str) {  
			var regu = /^[-]{0,1}[0-9]{1,}$/; 
			return regu.test(str); 
		},
		
		/**
		 * 检查输入字符串是否符合正整数格式
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isPositiveInteger: function(str) {
			var regu = "^[1-9][0-9]+$"; 
			var re = new RegExp(regu); 
			if (str.search(re) != -1) { 
				return true; 
			}
			return false; 
		},
		
		/**
		 * 检查输入字符串是否符合负整数格式
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isNegativeInteger: function(str) {
			var regu = "^-[1-9][0-9]+$"; 
			var re = new RegExp(regu); 
			if (str.search(re) != -1) { 
				return true; 
			}
			return false; 
		},
		
		/**
		 * 检查输入字符串是否符合整数格式，包含负整数，但不包含0
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isIntegerExcept0: function(str) {
			var regu = "^-?[1-9]\d*$"; 
			var re = new RegExp(regu); 
			if (str.search(re) != -1) { 
				return true; 
			}
			return false; 
		},
		
		/**
		 * 检查输入字符串是否符合整数格式，包含负整数和0
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isIntegerContains0: function(str) {
			var regu = "^-?[1-9]\d*|0$"; 
			var re = new RegExp(regu); 
			if (str.search(re) != -1) { 
				return true; 
			}
			return false; 
		},
		
		/**
		 * 检查输入字符串是否符合浮点数格式，包含负浮点数和0
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isFloat: function(str) {   
			var re = /^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$/; 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否符合正浮点数格式
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isPositiveFloat: function(str) {   
			var re = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/; 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否符合负浮点数格式
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isNegativeFloat: function(str) {   
			var re = /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/; 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否为空或者全部都是空格 
		 * @param str
		 * @returns 如果全是空返回true,否则返回false 
		 */
		isNull: function(str) { 
			if (str == "") return true; 
			var regu = "^[ ]+$"; 
			var re = new RegExp(regu); 
			return re.test(str); 
		},
		
		/**
		 * 去掉字符串头尾空格
		 * @param str
		 * @returns
		 */
		trim: function(str) {   
		    return str.replace(/(^\s*)|(\s*$)/g, "");   
		},
		
		/**
		 * 字符串去空格的函数
		 * @param sInputString
		 * @param iType 字符串去空格控制
		 * 0=去掉字符串左边和右边的空格
		 * 1=去掉字符串左边的空格 
		 * 2=去掉字符串右边的空格 
		 * @returns
		 */
		cTrim: function(sInputString, iType) { 
			//去掉字符串左边的空格
			if(iType == 0 || iType == 1) {
				var sTmpStr = ' '; 
				var i = -1; 
				while(sTmpStr == ' ') { 
					++i; 
					sTmpStr = sInputString.substr(i, i+1); 
				} 
				sInputString = sInputString.substring(i); 
			} 
			//去掉字符串右边的空格
			if(iType == 0 || iType == 2) { 
				var sTmpStr = ' '; 
				var i = sInputString.length; 
				while(sTmpStr == ' ') { 
					--i; 
					sTmpStr = sInputString.substr(i, i+1); 
				} 
				sInputString = sInputString.substring(0, i+1); 
			} 
			return sInputString; 
		},
		
		/**
		 * 过滤字符串中的特殊字符
		 * @param str
		 * @returns {String}
		 */
		filterSpecChar: function(str) { 
			var pattern = new RegExp(comm_specChar_regex); 
			var rs = ""; 
			for (var i=0; i<str.length; i++) { 
				rs = rs + str.substr(i, 1).replace(pattern, ''); 
			} 
			return rs; 
		},
		
		/**
		 * 检查字符串是否包含特殊字符
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isContainSpecChar: function(str) { 
			if (isNull(str)) return false;
			var re = new RegExp(comm_specChar_regex); 
			if(re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查字符串是否不包含特殊字符：' " \
		 * @param str
		 * @returns {Boolean} 如果不包含特殊字符则返回true,否则返回false
		 */
		isNoContainSpecialChar: function(str) {
			var regex = /\b((?![\'\"\\])\w)+\b/; 
			var re = new RegExp(regex); 
			if(re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 获取域内容的字节长度
		 * @param varField
		 * @returns {Number}
		 */
		getTotalBytes: function(varField) { 
			if(varField == null) {
				return -1;
			}
			var totalCount = 0; 
			for (i=0; i<varField.value.length; i++) { 
				if (varField.value.charCodeAt(i) > 127) {
					totalCount += 2;
				} else {
					totalCount++; 
				}
			} 
			return totalCount;
		},
		
		/**
		 * 字符1是否以字符串2结束
		 * @param str1
		 * @param str2 被包含的字符串
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isLastMatch: function(str1, str2) {  
			var index = str1.lastIndexOf(str2); 
			if(str1.length == index+str2.length) {
				return true;
			} 
			return false; 
		},

		/**
		 * 字符1是否以字符串2开始
		 * @param str1
		 * @param str2 被包含的字符串
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isFirstMatch: function(str1, str2) {  
			var index = str1.indexOf(str2); 
			if(index == 0) {
				return true;
			} 
			return false; 
		},

		/**
		 * 字符1是包含字符串2
		 * @param str1 
		 * @param str2 被包含的字符串
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isContains: function(str1, str2) {  
			var index = str1.indexOf(str2); 
			if(index == -1) {
				return false;
			} 
			return true; 
		},
		
		/**
		 * 检查输入字符串是否只由英文字母和数字和下划线组成 
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isNumberOr_Letter: function(str){
			var regu = "^[0-9a-zA-Z\_]+$"; 
			var re = new RegExp(regu); 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否只由英文字母和数字组成
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isNumberOrLetter: function(str){
			var regu = "^[0-9a-zA-Z]+$"; 
			var re = new RegExp(regu); 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否只由汉字、字母、数字组成
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isChinaOrNumbOrLett: function(str){ 
			var regu = "^[0-9a-zA-Z\u4e00-\u9fa5]+$";   
			var re = new RegExp(regu); 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否只由汉字、字母、数字、下划线组成
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isChinaOrNumbOr_Lett: function(str){ 
			var regu = "^[\_0-9a-zA-Z\u4e00-\u9fa5]+$";   
			var re = new RegExp(regu); 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		},
		
		/**
		 * 检查输入字符串是否只由汉字、字母、数字、中划线组成
		 * @param str
		 * @returns {Boolean} 如果通过验证返回true,否则返回false
		 */
		isChinaOrNumbLettOrDash: function(str){ 
			var regu = "^[\-0-9a-zA-Z\u4e00-\u9fa5]+$";   
			var re = new RegExp(regu); 
			if (re.test(str)) { 
				return true; 
			}
			return false;
		}
}